;1E/1F = 16 bit timer, increments once per frame
;25 = length to play sound
;26-3D = display data bytes
;3E, 3F = column scan




;get things rolling
0000:  55      STRT T		;start timer
0001:  BD  01  MOV R5,01	;start at the top of the LCD

0003:  74  3D  CALL 33D		;do LCD refresh

;clear out RAM at 24-3Fh
0005:  27      CLR A		;write 0's
0006:  BF  1A  MOV R7,1A	;1Ah bytes
0008:  B8  24  MOV R0,24	;start at 024h
000A:  A0      MOV @ R0,A	;clear it
000B:  18      INC R0
000C:  EF  0A  DJNZ R7 0A	;do all 26 bytes

000E:  74  3D  CALL 33D		;do LCD refresh

0010:  B8  1F  MOV R0,1F	;clear high byte of frame counter
0012:  B0  00  MOV @ R0,00
0014:  54  BC  CALL 2BC
0016:  BB  01  MOV R3,01
0018:  54  C5  CALL 2C5
001A:  B1  00  MOV @ R1,00

001C:  BC  BF  MOV R4,BF	;check 2nd row
001E:  74  02  CALL 302		;read keys
0020:  C6  54  JZ 54		;"go" button pressed
0022:  B9  18  MOV R1,18
0024:  BB  01  MOV R3,01
0026:  07      DEC A
0027:  C6  32  JZ 32		;"players" button pressed
0029:  07      DEC A
002A:  96  1C  JNZ,1C		;not "skill", check for a button 
002C:  34  CC  CALL 1CC		;"skill" button pressed
002E:  C6  1C  JZ 1C
0030:  BB  05  MOV R3,05
0032:  FB      MOV A,R3
0033:  07      DEC A
0034:  AC      MOV R4,A
0035:  34  CC  CALL 1CC
0037:  96  43  JNZ,43
0039:  54  C5  CALL 2C5
003B:  1B      INC R3
003C:  54  B7  CALL 2B7
003E:  FC      MOV A,R4
003F:  C6  14  JZ 14
0041:  04  1A  JMP 01A
0043:  B1  01  MOV @ R1,01
0045:  54  B7  CALL 2B7
0047:  1B      INC R3
0048:  54  C5  CALL 2C5
004A:  FC      MOV A,R4
004B:  96  1C  JNZ,1C
004D:  54  B5  CALL 2B5
004F:  1B      INC R3
0050:  54  B7  CALL 2B7
0052:  04  1C  JMP 01C

;
0054:  B8  17  MOV R0,17
0056:  B0  0F  MOV @ R0,0F
0058:  74  3D  CALL 33D		;update LCD
005A:  BB  01  MOV R3,01

;pot reading routine
005C:  23  01  MOV A,01
005E:  3A      OUTL P2,A	;pot low + feeper = 01
005F:  BA  0C  MOV R2,0C
0061:  46  65  JNT1,65
0063:  EA  61  DJNZ R2 61
0065:  97      CLR C
0066:  FA      MOV A,R2
0067:  67      RRC A
0068:  AA      MOV R2,A
0069:  1A      INC R2
006A:  23  0D  MOV A,0D
006C:  3A      OUTL P2,A	;pot high + feeper = 01
006D:  34  CC  CALL 1CC
006F:  C6  89  JZ 89
0071:  1A      INC R2
0072:  FA      MOV A,R2
0073:  03  F8  ADD A,F8
0075:  96  6D  JNZ,6D
0077:  EA  85  DJNZ R2 85
0079:  54  98  CALL 298
007B:  B8  25  MOV R0,25
007D:  B0  80  MOV @ R0,80
007F:  74  00  CALL 300		;read bottom row
0081:  C6  01  JZ 01		;reset if button pressed?
0083:  04  7F  JMP 07F

0085:  34  CC  CALL 1CC
0087:  96  77  JNZ,77
0089:  74  EC  CALL 3EC
008B:  BB  01  MOV R3,01
008D:  C6  01  JZ 01		;reset game
008F:  07      DEC A
0090:  C6  9D  JZ 9D
0092:  07      DEC A
0093:  96  58  JNZ,58
0095:  54  00  CALL 200
0097:  C6  EC  JZ EC
0099:  34  C8  CALL 1C8
009B:  96  58  JNZ,58
009D:  54  B7  CALL 2B7
009F:  B9  20  MOV R1,20
00A1:  B1  FD  MOV @ R1,FD
00A3:  19      INC R1
00A4:  B1  00  MOV @ R1,00
00A6:  19      INC R1
00A7:  B1  08  MOV @ R1,08
00A9:  19      INC R1
00AA:  B1  FF  MOV @ R1,FF
00AC:  BA  07  MOV R2,07
00AE:  19      INC R1
00AF:  54  EB  CALL 2EB
00B1:  C6  BA  JZ BA
00B3:  B1  00  MOV @ R1,00
00B5:  54  16  CALL 216
00B7:  11      INC @ R1
00B8:  54  16  CALL 216
00BA:  EA  AF  DJNZ R2 AF
00BC:  B8  20  MOV R0,20
00BE:  F0      MOV A,@ R0
00BF:  C6  CF  JZ CF
00C1:  03  03  ADD A,03
00C3:  B9  23  MOV R1,23
00C5:  96  CD  JNZ,CD
00C7:  F1      MOV A,@ R1
00C8:  C6  CF  JZ CF
00CA:  17      INC A
00CB:  C6  79  JZ 79
00CD:  64  A8  JMP 3A8
00CF:  BA  00  MOV R2,00
00D1:  BB  01  MOV R3,01
00D3:  B8  12  MOV R0,12
00D5:  F0      MOV A,@ R0
00D6:  37      CPL A
00D7:  17      INC A
00D8:  6A      ADD A,R2
00D9:  F6  E8  JC E8
00DB:  1A      INC R2
00DC:  34  CC  CALL 1CC
00DE:  96  D3  JNZ,D3
00E0:  54  C5  CALL 2C5
00E2:  74  2C  CALL 32C
00E4:  54  B7  CALL 2B7
00E6:  04  D3  JMP 0D3
00E8:  54  00  CALL 200
00EA:  96  58  JNZ,58
00EC:  B8  13  MOV R0,13
00EE:  F0      MOV A,@ R0
00EF:  AA      MOV R2,A
00F0:  18      INC R0
00F1:  F0      MOV A,@ R0
00F2:  AB      MOV R3,A
00F3:  74  EC  CALL 3EC
00F5:  C6  01  JZ 01
00F7:  04  EC  JMP 0EC
00F9:  FF      MOV A,R7
00FA:  FF      MOV A,R7
00FB:  FF      MOV A,R7
00FC:  FF      MOV A,R7
00FD:  FF      MOV A,R7
00FE:  FF      MOV A,R7
00FF:  FF      MOV A,R7
0100:  74  3D  CALL 33D
0102:  B8  15  MOV R0,15
0104:  F0      MOV A,@ R0
0105:  6A      ADD A,R2
0106:  AA      MOV R2,A
0107:  18      INC R0
0108:  F0      MOV A,@ R0
0109:  6B      ADD A,R3
010A:  AB      MOV R3,A
010B:  C6  16  JZ 16
010D:  03  F9  ADD A,F9
010F:  C6  16  JZ 16
0111:  FA      MOV A,R2
0112:  C6  16  JZ 16
0114:  03  F8  ADD A,F8
0116:  83      RET
0117:  74  3D  CALL 33D
0119:  B8  13  MOV R0,13
011B:  F0      MOV A,@ R0
011C:  AA      MOV R2,A
011D:  18      INC R0
011E:  F0      MOV A,@ R0
011F:  AB      MOV R3,A
0120:  23  FC  MOV A,FC
0122:  B9  19  MOV R1,19
0124:  A1      MOV @ R1,A
0125:  19      INC R1
0126:  A1      MOV @ R1,A
0127:  19      INC R1
0128:  A1      MOV @ R1,A
0129:  27      CLR A
012A:  19      INC R1
012B:  A1      MOV @ R1,A
012C:  AC      MOV R4,A
012D:  34  CC  CALL 1CC
012F:  C6  36  JZ 36
0131:  B8  17  MOV R0,17
0133:  D0      XRL A,@ R0
0134:  96  41  JNZ,41
0136:  34  00  CALL 100
0138:  C6  42  JZ 42
013A:  FC      MOV A,R4
013B:  07      DEC A
013C:  AC      MOV R4,A
013D:  03  04  ADD A,04
013F:  96  2D  JNZ,2D
0141:  1C      INC R4
0142:  B8  15  MOV R0,15
0144:  F0      MOV A,@ R0
0145:  37      CPL A
0146:  17      INC A
0147:  A0      MOV @ R0,A
0148:  18      INC R0
0149:  F0      MOV A,@ R0
014A:  37      CPL A
014B:  17      INC A
014C:  A0      MOV @ R0,A
014D:  34  00  CALL 100
014F:  34  CC  CALL 1CC
0151:  B8  17  MOV R0,17
0153:  C6  91  JZ 91
0155:  D0      XRL A,@ R0
0156:  96  83  JNZ,83
0158:  F1      MOV A,@ R1
0159:  03  04  ADD A,04
015B:  A1      MOV @ R1,A
015C:  18      INC R0
015D:  F0      MOV A,@ R0
015E:  C6  6C  JZ 6C
0160:  FC      MOV A,R4
0161:  17      INC A
0162:  C6  68  JZ 68
0164:  07      DEC A
0165:  07      DEC A
0166:  96  6C  JNZ,6C
0168:  F1      MOV A,@ R1
0169:  03  04  ADD A,04
016B:  A1      MOV @ R1,A
016C:  B8  19  MOV R0,19
016E:  10      INC @ R0
016F:  18      INC R0
0170:  10      INC @ R0
0171:  F0      MOV A,@ R0
0172:  C6  AF  JZ AF
0174:  18      INC R0
0175:  10      INC @ R0
0176:  F0      MOV A,@ R0
0177:  C6  B3  JZ B3
0179:  34  00  CALL 100
017B:  C6  83  JZ 83
017D:  1C      INC R4
017E:  FC      MOV A,R4
017F:  03  FC  ADD A,FC
0181:  96  4F  JNZ,4F
0183:  B8  19  MOV R0,19
0185:  F0      MOV A,@ R0
0186:  F7      RLC A
0187:  F6  90  JC 90
0189:  F0      MOV A,@ R0
018A:  03  01  ADD A,01
018C:  61      ADD A,@ R1
018D:  19      INC R1
018E:  61      ADD A,@ R1
018F:  A1      MOV @ R1,A
0190:  83      RET
0191:  1B      INC R3
0192:  FB      MOV A,R3
0193:  03  F9  ADD A,F9
0195:  C6  9B  JZ 9B
0197:  34  CC  CALL 1CC
0199:  C6  9F  JZ 9F
019B:  23  05  MOV A,05
019D:  61      ADD A,@ R1
019E:  A1      MOV @ R1,A
019F:  EB  A1  DJNZ R3 A1
01A1:  B8  19  MOV R0,19
01A3:  10      INC @ R0
01A4:  18      INC R0
01A5:  B0  FC  MOV @ R0,FC
01A7:  18      INC R0
01A8:  FC      MOV A,R4
01A9:  C6  75  JZ 75
01AB:  B0  FC  MOV @ R0,FC
01AD:  24  79  JMP 179
01AF:  B8  24  MOV R0,24
01B1:  B0  FF  MOV @ R0,FF
01B3:  74  3D  CALL 33D
01B5:  B8  23  MOV R0,23
01B7:  F0      MOV A,@ R0
01B8:  96  BF  JNZ,BF
01BA:  B9  24  MOV R1,24
01BC:  F1      MOV A,@ R1
01BD:  96  C7  JNZ,C7
01BF:  B0  00  MOV @ R0,00
01C1:  B8  13  MOV R0,13
01C3:  F0      MOV A,@ R0
01C4:  B8  12  MOV R0,12
01C6:  A0      MOV @ R0,A
01C7:  83      RET
01C8:  BB  02  MOV R3,02
01CA:  BA  00  MOV R2,00

01CC:  74  3D  CALL 33D
01CE:  54  A3  CALL 2A3
01D0:  F0      MOV A,@ R0
01D1:  E7      RL A
01D2:  E7      RL A
01D3:  AE      MOV R6,A
01D4:  18      INC R0
01D5:  18      INC R0
01D6:  F0      MOV A,@ R0
01D7:  E7      RL A
01D8:  E7      RL A
01D9:  2E      XCH A,R6
01DA:  E7      RL A
01DB:  E7      RL A
01DC:  2E      XCH A,R6
01DD:  EF  D7  DJNZ R7 D7
01DF:  53  03  ANL A,03
01E1:  2E      XCH A,R6
01E2:  53  0C  ANL A,0C
01E4:  4E      ORL A,R6
01E5:  83      RET
01E6:  FF      MOV A,R7
01E7:  FF      MOV A,R7
01E8:  FF      MOV A,R7
01E9:  FF      MOV A,R7
01EA:  FF      MOV A,R7
01EB:  FF      MOV A,R7
01EC:  FF      MOV A,R7
01ED:  FF      MOV A,R7
01EE:  FF      MOV A,R7
01EF:  FF      MOV A,R7
01F0:  FF      MOV A,R7
01F1:  FF      MOV A,R7
01F2:  FF      MOV A,R7
01F3:  FF      MOV A,R7
01F4:  FF      MOV A,R7
01F5:  FF      MOV A,R7
01F6:  FF      MOV A,R7
01F7:  FF      MOV A,R7
01F8:  FF      MOV A,R7
01F9:  FF      MOV A,R7
01FA:  FF      MOV A,R7
01FB:  FF      MOV A,R7
01FC:  FF      MOV A,R7
01FD:  FF      MOV A,R7
01FE:  FF      MOV A,R7
01FF:  FF      MOV A,R7
0200:  54  B7  CALL 2B7
0202:  54  EB  CALL 2EB
0204:  37      CPL A
0205:  17      INC A
0206:  A9      MOV R1,A
0207:  BB  01  MOV R3,01
0209:  54  C5  CALL 2C5
020B:  74  2C  CALL 32C
020D:  F9      MOV A,R1
020E:  6B      ADD A,R3
020F:  C6  16  JZ 16
0211:  54  B7  CALL 2B7
0213:  1B      INC R3
0214:  44  09  JMP 209
0216:  74  3D  CALL 33D
0218:  B8  1D  MOV R0,1D
021A:  B0  00  MOV @ R0,00
021C:  FA      MOV A,R2
021D:  B8  13  MOV R0,13
021F:  A0      MOV @ R0,A
0220:  FB      MOV A,R3
0221:  18      INC R0
0222:  A0      MOV @ R0,A
0223:  18      INC R0
0224:  B0  FF  MOV @ R0,FF
0226:  18      INC R0
0227:  B0  00  MOV @ R0,00
0229:  34  17  CALL 117
022B:  B8  16  MOV R0,16
022D:  B0  01  MOV @ R0,01
022F:  34  17  CALL 117
0231:  B8  15  MOV R0,15
0233:  B0  00  MOV @ R0,00
0235:  34  17  CALL 117
0237:  B8  15  MOV R0,15
0239:  B0  FF  MOV @ R0,FF
023B:  34  17  CALL 117
023D:  74  3D  CALL 33D
023F:  B9  23  MOV R1,23
0241:  F1      MOV A,@ R1
0242:  C6  8C  JZ 8C
0244:  B8  21  MOV R0,21
0246:  F0      MOV A,@ R0
0247:  B8  1D  MOV R0,1D
0249:  10      INC @ R0
024A:  60      ADD A,@ R0
024B:  F6  8C  JC 8C
024D:  17      INC A
024E:  96  5A  JNZ,5A
0250:  B8  22  MOV R0,22
0252:  F0      MOV A,@ R0
0253:  37      CPL A
0254:  17      INC A
0255:  B8  13  MOV R0,13
0257:  60      ADD A,@ R0
0258:  F6  8C  JC 8C
025A:  B8  1D  MOV R0,1D
025C:  F1      MOV A,@ R1
025D:  60      ADD A,@ R0
025E:  F6  70  JC 70
0260:  17      INC A
0261:  96  8C  JNZ,8C
0263:  B8  20  MOV R0,20
0265:  F0      MOV A,@ R0
0266:  03  03  ADD A,03
0268:  96  8C  JNZ,8C
026A:  B8  1E  MOV R0,1E
026C:  F0      MOV A,@ R0
026D:  67      RRC A
026E:  E6  8C  JNC 8C
0270:  B8  18  MOV R0,18
0272:  F0      MOV A,@ R0
0273:  96  81  JNZ,81
0275:  B8  23  MOV R0,23
0277:  F0      MOV A,@ R0
0278:  17      INC A
0279:  C6  81  JZ 81
027B:  B8  1E  MOV R0,1E
027D:  F0      MOV A,@ R0
027E:  67      RRC A
027F:  E6  8C  JNC 8C
0281:  B8  1D  MOV R0,1D
0283:  F0      MOV A,@ R0
0284:  37      CPL A
0285:  A1      MOV @ R1,A
0286:  B8  13  MOV R0,13
0288:  F0      MOV A,@ R0
0289:  B8  12  MOV R0,12
028B:  A0      MOV @ R0,A
028C:  19      INC R1
028D:  F1      MOV A,@ R1
028E:  17      INC A
028F:  C6  9F  JZ 9F
0291:  B8  13  MOV R0,13
0293:  F0      MOV A,@ R0
0294:  AA      MOV R2,A
0295:  18      INC R0
0296:  F0      MOV A,@ R0
0297:  AB      MOV R3,A
0298:  B8  17  MOV R0,17
029A:  F0      MOV A,@ R0
029B:  D3  06  XRL A,06
029D:  A0      MOV @ R0,A
029E:  83      RET
029F:  19      INC R1
02A0:  B1  80  MOV @ R1,80
02A2:  83      RET
02A3:  FB      MOV A,R3
02A4:  E7      RL A
02A5:  E7      RL A
02A6:  03  22  ADD A,22
02A8:  A8      MOV R0,A
02A9:  FA      MOV A,R2
02AA:  03  FC  ADD A,FC
02AC:  FA      MOV A,R2
02AD:  E6  B2  JNC B2
02AF:  18      INC R0
02B0:  03  FC  ADD A,FC
02B2:  17      INC A
02B3:  AF      MOV R7,A
02B4:  83      RET
02B5:  BB  05  MOV R3,05
02B7:  74  3D  CALL 33D
02B9:  27      CLR A
02BA:  44  CA  JMP 2CA


02BC:  B9  17  MOV R1,17
02BE:  B1  0A  MOV @ R1,0A
02C0:  19      INC R1
02C1:  BB  05  MOV R3,05
02C3:  BA  00  MOV R2,00
02C5:  74  3D  CALL 33D
02C7:  B8  17  MOV R0,17
02C9:  F0      MOV A,@ R0
02CA:  77      RR A
02CB:  77      RR A
02CC:  AE      MOV R6,A
02CD:  54  A3  CALL 2A3
02CF:  23  FC  MOV A,FC
02D1:  77      RR A
02D2:  77      RR A
02D3:  2E      XCH A,R6
02D4:  77      RR A
02D5:  77      RR A
02D6:  2E      XCH A,R6
02D7:  EF  D1  DJNZ R7 D1
02D9:  AF      MOV R7,A
02DA:  54  E3  CALL 2E3
02DC:  18      INC R0
02DD:  18      INC R0
02DE:  FE      MOV A,R6
02DF:  E7      RL A
02E0:  E7      RL A
02E1:  AE      MOV R6,A
02E2:  FF      MOV A,R7
02E3:  50      ANL A,@ R0
02E4:  A0      MOV @ R0,A
02E5:  FF      MOV A,R7
02E6:  37      CPL A
02E7:  5E      ANL A,R6
02E8:  40      ORL A,@ R0
02E9:  A0      MOV @ R0,A
02EA:  83      RET
02EB:  BB  06  MOV R3,06
02ED:  34  CC  CALL 1CC
02EF:  C6  F3  JZ F3
02F1:  EB  ED  DJNZ R3 ED
02F3:  FB      MOV A,R3
02F4:  83      RET


02F5:  FF      MOV A,R7
02F6:  FF      MOV A,R7
02F7:  FF      MOV A,R7
02F8:  FF      MOV A,R7
02F9:  FF      MOV A,R7
02FA:  FF      MOV A,R7
02FB:  FF      MOV A,R7
02FC:  FF      MOV A,R7
02FD:  FF      MOV A,R7
02FE:  FF      MOV A,R7
02FF:  FF      MOV A,R7


0300:  BC  EF  MOV R4,EF	;start column
0302:  74  10  CALL 310		;read keys in column 
0304:  AB      MOV R3,A		;store in R3
0305:  17      INC A
0306:  C6  25  JZ 25		;no key? jump
0308:  74  10  CALL 310		;read keys in column again
030A:  B8  1F  MOV R0,1F
030C:  B0  00  MOV @ R0,00	;reset frame counter high
030E:  64  05  JMP 305		;wait for key to be released

0310:  B9  FF  MOV R1,FF	;load R1 with FF
0312:  74  3D  CALL 33D		;LCD update
0314:  FC      MOV A,R4
0315:  90      OUTL P0,A	;output R4 to P0 to scan it
0316:  08      INS A,P0
0317:  43  F8  ORL A,F8		;or with F8 to strip bits
0319:  29      XCH A,R1		;swap with R1
031A:  D9      XRL A,R1		;same as last time?
031B:  96  12  JNZ,12		;nope, keep reading until it is stable
031D:  74  3D  CALL 33D		;LCD update
031F:  F9      MOV A,R1		;A can be 0,1,2,4 only
0320:  37      CPL A		;invert A to get 0,1,2,4
0321:  03  38  ADD A,38		;point to table
0323:  A3      MOVP A,@ A	;get byte
0324:  83      RET

0325:  B8  1F  MOV R0,1F
0327:  F0      MOV A,@ R0	;is frame timer high zero?
0328:  96  36  JNZ,36
032A:  B0  FA  MOV @ R0,FA	;yes it is, load FAh into it
032C:  B8  25  MOV R0,25
032E:  B0  FD  MOV @ R0,FD	;FD to feep the piezo for button press 
;well it feeps when the button is *released* 

0330:  BC  40  MOV R4,40
0332:  74  3D  CALL 33D		;update LCD
0334:  EC  32  DJNZ R4 32	;update it 64x to make it feep
0336:  FB      MOV A,R3		;get saved key(s)
0337:  83      RET		;done

;key table
0338:  FF      MOV A,R7			;no key down
0339:  00      NOP			;first column
033A:  02      OUTL BUS,A		;second column
033B:  FF      MOV A,R7			;illegal
033C:  01      *** ILLEGAL *** 	;3rd column
;lol it can walk off the end of the table

;R5 = current display line
;main display update loop
033D:  16  41  JTF 41		;wait for timer to expire
033F:  64  3D  JMP 33D

0341:  23  F8  MOV A,F8
0343:  62      MOV T,A		;load timer with F8h
0344:  BF  02  MOV R7,02	;these will be used later to optimize the code
0346:  BE  FC  MOV R6,FC
0348:  23  03  MOV A,03	
034A:  39      OUTL P1,A	;write 03h to P1
034B:  FF      MOV A,R7
034C:  39      OUTL P1,A	;write 02h to P1
034D:  ED  6F  DJNZ R5 6F	;nonzero = not start of new frame

;start a new scan at the top row
;this toggles the LCD data XOR
034F:  27      CLR A
0350:  39      OUTL P1,A	;output 00h to P1
0351:  17      INC A
0352:  39      OUTL P1,A	;output 01h to P1
0353:  27      CLR A
0354:  39      OUTL P1,A	;output 00h to P1

;do sound
;it output 0eh when (25h) is nonzero
;then it increments (25h) until it is zero, stopping the sound
;end of interrupt toggles P2 to 0Dh
0355:  B8  25  MOV R0,25
0357:  F0      MOV A,@ R0
0358:  C6  5E  JZ 5E		;if 0, no noise will be made
035A:  10      INC @ R0		;increment noise counter
035B:  23  0E  MOV A,0E		;output one side of speaker low
035D:  3A      OUTL P2,A	;pot high + feeper = 10

;increment timer in 1E/1F
035E:  B8  1E  MOV R0,1E
0360:  10      INC @ R0		;inc 1Eh
0361:  F0      MOV A,@ R0
0362:  96  66  JNZ,66
0364:  18      INC R0		;inc 1Fh if 1Eh == 0
0365:  10      INC @ R0

;init LCD row to start drawing on
0366:  BD  0C  MOV R5,0C	;12 rows of LCD action
0368:  B8  3E  MOV R0,3E	;load starting row # for scanning the LCD rows
036A:  B0  00  MOV @ R0,00	;00h -> (3e)
036C:  18      INC R0
036D:  B0  02  MOV @ R0,02	;02h -> (3f)

;continue doing scanning
;sound thing
036F:  B8  25  MOV R0,25
0371:  F0      MOV A,@ R0
0372:  C6  77  JZ 77
0374:  23  0E  MOV A,0E		;output 0eh if sound should still be going off
0376:  3A      OUTL P2,A	;pot high + feeper = 10

;shift the scanning row #
0377:  97      CLR C		
0378:  B8  3F  MOV R0,3F
037A:  F0      MOV A,@ R0
037B:  F7      RLC A
037C:  A0      MOV @ R0,A
037D:  B8  3E  MOV R0,3E
037F:  F0      MOV A,@ R0
0380:  F7      RLC A
0381:  A0      MOV @ R0,A	;shift active row #
0382:  74  91  CALL 391		;output row select

;output one row of 16 pixels
0384:  FD      MOV A,R5		;get line #
0385:  97      CLR C
0386:  F7      RLC A		;mult by 2
0387:  03  24  ADD A,24		;add 24
0389:  A8      MOV R0,A
038A:  F0      MOV A,@ R0	;get first byte of that line
038B:  74  91  CALL 391		;output column data

038D:  23  0D  MOV A,0D		;output 0dh to the sound thinger
038F:  3A      OUTL P2,A	;pot high + feeper = 01
0390:  83      RET

;the 12 row shifter patterns
;0 = 00 1 = 04   R5 = 0ch  0 0 0 4 row 13
;0 = 00 1 = 08   R5 = 0bh  0 0 0 8 row 12
;0 = 00 1 = 10   R5 = 0ah  0 0 0 4 row 11
;0 = 00 1 = 20   R5 = 09h  0 0 0 8 row 10
;0 = 00 1 = 40   R5 = 08h  0 0 0 4 row 9
;0 = 00 1 = 80   R5 = 07h  0 0 8 0 row 8
;0 = 01 1 = 00   R5 = 06h  0 1 0 0 row 7
;0 = 02 1 = 00   R5 = 05h  0 2 0 0 row 6
;0 = 04 1 = 00   R5 = 04h  0 4 0 0 row 5
;0 = 08 1 = 00   R5 = 03h  0 8 0 0 row 4
;0 = 10 1 = 00   R5 = 02h  1 0 0 0 row 3
;0 = 20 1 = 00   R5 = 01h  2 0 0 0 row 2

;the 12 col patterns
;0 = 3ch, 1 = 3dh  row 13
;0 = 3ah, 1 = 3bh  row 12
;0 = 38h, 1 = 39h  row 11
;0 = 36h, 1 = 37h  row 10
;0 = 34h, 1 = 35h  row 9
;0 = 32h, 1 = 33h  row 8
;0 = 30h, 1 = 31h  row 7
;0 = 2eh, 1 = 2fh  row 6
;0 = 2ch, 1 = 2dh  row 5
;0 = 2ah, 1 = 2bh  row 4
;0 = 28h, 1 = 29h  row 3
;0 = 26h, 1 = 27h  row 2

;pixels are arranged on the LCD as such for 1 row:
;  byte:
;  low       hi
;76543210 76543210
;
;rows are in order of memory, 26h is the top line, left side
;27h is top line, right side. 28h is the next line left side
;and so on.
;only 12 rows are populated.

;output 16 bits to the LCD driver, 4 bits at a time
0391:  5E      ANL A,R6		
0392:  39      OUTL P1,A	;output upper nybble of (r0)
0393:  4F      ORL A,R7		
0394:  39      OUTL P1,A	;clock it in
0395:  F0      MOV A,@ R0
0396:  47      SWAP A
0397:  5E      ANL A,R6		;output lower nybble of (r0)
0398:  39      OUTL P1,A
0399:  4F      ORL A,R7
039A:  39      OUTL P1,A	;clock it in
039B:  18      INC R0
039C:  F0      MOV A,@ R0	;output upper nybble of (r0+1)
039D:  5E      ANL A,R6
039E:  39      OUTL P1,A
039F:  4F      ORL A,R7
03A0:  39      OUTL P1,A	;clock it in
03A1:  F0      MOV A,@ R0	;output lower nybble of (r0+1)
03A2:  47      SWAP A
03A3:  5E      ANL A,R6
03A4:  39      OUTL P1,A
03A5:  4F      ORL A,R7
03A6:  39      OUTL P1,A	;clock it in
03A7:  83      RET


03A8:  F1      MOV A,@ R1
03A9:  17      INC A
03AA:  96  BA  JNZ,BA
03AC:  B9  20  MOV R1,20
03AE:  11      INC @ R1
03AF:  B8  18  MOV R0,18
03B1:  F0      MOV A,@ R0
03B2:  96  B8  JNZ,B8
03B4:  F1      MOV A,@ R1
03B5:  C6  B8  JZ B8
03B7:  11      INC @ R1
03B8:  04  A3  JMP 0A3
03BA:  B8  12  MOV R0,12
03BC:  F0      MOV A,@ R0
03BD:  AA      MOV R2,A
03BE:  54  EB  CALL 2EB
03C0:  07      DEC A
03C1:  C6  EA  JZ EA
03C3:  AB      MOV R3,A
03C4:  F1      MOV A,@ R1
03C5:  B8  21  MOV R0,21
03C7:  A0      MOV @ R0,A
03C8:  B8  20  MOV R0,20
03CA:  F0      MOV A,@ R0
03CB:  17      INC A
03CC:  C6  D2  JZ D2
03CE:  54  16  CALL 216
03D0:  64  D4  JMP 3D4
03D2:  54  98  CALL 298
03D4:  54  16  CALL 216
03D6:  B9  23  MOV R1,23
03D8:  F1      MOV A,@ R1
03D9:  96  EA  JNZ,EA
03DB:  B8  20  MOV R0,20
03DD:  F0      MOV A,@ R0
03DE:  03  03  ADD A,03
03E0:  C6  AC  JZ AC
03E2:  B8  12  MOV R0,12
03E4:  F0      MOV A,@ R0
03E5:  B8  22  MOV R0,22
03E7:  A0      MOV @ R0,A
03E8:  04  AA  JMP 0AA
03EA:  04  CF  JMP 0CF

03EC:  54  C5  CALL 2C5
03EE:  74  30  CALL 330
03F0:  54  B7  CALL 2B7
03F2:  74  30  CALL 330
03F4:  64  00  JMP 300
03F6:  FF      MOV A,R7
03F7:  FF      MOV A,R7
03F8:  FF      MOV A,R7
03F9:  FF      MOV A,R7
03FA:  FF      MOV A,R7
03FB:  FF      MOV A,R7
03FC:  FF      MOV A,R7
03FD:  FF      MOV A,R7
03FE:  FF      MOV A,R7
03FF:  FF      MOV A,R7


